<!DOCTYPE html>
<html lang="zh">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>
    
    文件定位 - DSRBLOG
    
  </title>
  

  
  
  <link href="atom.xml" rel="alternate" title="DSRBLOG" type="application/atom+xml">
  <link rel="stylesheet" href="asset/css/style.min.css">
  <link rel="stylesheet" href="asset/css/doc.css">
  <script src="asset/app.js"></script>


</head>

<body> <section class="ct-body">
	<div class="container">
		<div class="columns is-variable bd-klmn-columns is-4 is-centered">
			<div class="column is-four-fifths">
				<div class="post-body single-content">
					
					<h1 class="title">
						文件定位
					</h1>


					<div class="media">
						
						
						<div class="media-content">
							<div class="content">
								<p>
									<span class="date">2022/02/09 03:34 上午</span>
									

									

									<br />
									<span class="tran-tags">Tags:</span>&nbsp;
									
									<a class="tag is-link is-light">#C语言</a>
									

								</p>
							</div>
						</div>

					</div>
				</div>
				<article class="markdown-body single-content">
					<p>打开文件成功后，文件内存在<strong>位置指针</strong>，用来指示当前的读写位置</p>
<ul>
<li>
<p>一般情况下，在对字符文件进行顺序读写时，文件的位置指针指向文件开头，这时如果对文件进行读写操作，就会读写文件的第一个字符，然后文件的位置指针向后移动一个位置，指向文件的第二个字符，以此类推，直到遇到文件尾（EOF）</p>
</li>
<li>
<p>有时希望在一个文件的原有数据之后再添加新的数据，应该把文件位置指针移动到文件尾，然后再写入新的数据，这就是<strong>文件的追加</strong></p>
</li>
</ul>
<h2><a id="fseek%E4%BD%8D%E7%BD%AE%E6%8C%87%E9%92%88%E5%AE%9A%E4%BD%8D%E5%87%BD%E6%95%B0" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>fseek()--位置指针定位函数</h2>
<h3><a id="%E5%87%BD%E6%95%B0%E5%8A%9F%E8%83%BD" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>函数功能</h3>
<p>改变文件的位置指针</p>
<h3><a id="%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E5%BD%A2%E5%BC%8F" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>函数调用形式</h3>
<pre class="line-numbers"><code class="language-c">fseek(文件类型指针（fp）, 位移量, 起始点);
</code></pre>
<h4><a id="%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B%E6%8C%87%E9%92%88" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>文件类型指针</h4>
<pre class="line-numbers"><code class="language-c">FILE *fp;
</code></pre>
<h4><a id="%E8%B5%B7%E5%A7%8B%E7%82%B9" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>起始点</h4>
<ul>
<li>文件开头 <code>SEEK_SET</code>或<code>0</code></li>
<li>文件当前位置 <code>SEEK_CUR</code>或<code>1</code></li>
<li>文件末尾 <code>SEEK_END</code>或<code>2</code></li>
</ul>
<h4><a id="%E4%BD%8D%E7%A7%BB%E9%87%8F" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>位移量</h4>
<p>以<strong>起始点</strong>为基点，<strong>向前移动（负值）</strong> 或<strong>向后移动（正值）</strong> 的字节数，一般要求为<code>long</code>型</p>
<pre class="line-numbers"><code class="language-c">fseek(fp, 10L, 0);
或
fseek(fp, 10L, SEEK_SET);
//将fp所指向的文件中的位置指针以文件开头为起始点，向后移动10个字节
</code></pre>
<h2><a id="ftell%E6%B1%82%E4%BD%8D%E7%BD%AE%E6%8C%87%E9%92%88%E5%81%8F%E7%A7%BB%E5%80%BC%E5%87%BD%E6%95%B0" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>ftell()--求位置指针偏移值函数</h2>
<h3><a id="%E5%87%BD%E6%95%B0%E5%8A%9F%E8%83%BD" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>函数功能</h3>
<p>得到流式文件中位置指针的当前位置，用相对于文件开头的位移量（<strong>字节</strong>）表示</p>
<h3><a id="%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E5%BD%A2%E5%BC%8F" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>函数调用形式</h3>
<pre class="line-numbers"><code class="language-c">ftell(文件类型指针（fp）);
</code></pre>
<h3><a id="%E8%BF%94%E5%9B%9E%E5%80%BC" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>返回值</h3>
<p>返回当前位置，出错时返回-1L</p>
<h3><a id="%E5%BA%94%E7%94%A8%E4%B8%BE%E4%BE%8B" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>应用举例</h3>
<pre class="line-numbers"><code class="language-c">int i = ftell(fp);
if(i == -1L)
    printf(&quot;error&quot;);
</code></pre>
<h2><a id="rewind%E4%BD%8D%E7%BD%AE%E6%8C%87%E9%92%88%E5%A4%8D%E4%BD%8D%E5%87%BD%E6%95%B0" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>rewind()--位置指针复位函数</h2>
<h3><a id="%E5%87%BD%E6%95%B0%E5%8A%9F%E8%83%BD" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>函数功能</h3>
<p>使位置指针重新返回文件的开头，此函数没有返回值</p>
<h3><a id="%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8%E5%BD%A2%E5%BC%8F" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>函数调用形式</h3>
<pre class="line-numbers"><code class="language-c">rewind(文件类型指针（fp）);
</code></pre>
<h2><a id="%E5%87%BA%E9%94%99%E7%9A%84%E6%A3%80%E6%B5%8B" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>出错的检测</h2>
<h3><a id="ferror%E5%87%BD%E6%95%B0" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>ferror()函数</h3>
<h4><a id="%E8%B0%83%E7%94%A8%E5%BD%A2%E5%BC%8F" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>调用形式</h4>
<pre class="line-numbers"><code class="language-c">ferror(文件类型指针（fp）);
</code></pre>
<h4><a id="%E8%BF%94%E5%9B%9E%E5%BD%A2%E5%BC%8F" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>返回形式</h4>
<ul>
<li>返回0，表示未出错</li>
<li>返回非0，表示出错</li>
</ul>
<p>在执行<code>fopen()</code>函数时，<code>ferror()</code>函数的初始值会自动设置为0</p>
<h3><a id="clearerr%E5%87%BD%E6%95%B0" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>clearerr()函数</h3>
<h4><a id="%E8%B0%83%E7%94%A8%E5%BD%A2%E5%BC%8F" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>调用形式</h4>
<pre class="line-numbers"><code class="language-c">clearerr(文件类型指针（fp）);
</code></pre>
<h4><a id="%E5%87%BD%E6%95%B0%E5%8A%9F%E8%83%BD" class="anchor" aria-hidden="true"><span class="octicon octicon-link"></span></a>函数功能</h4>
<p>使<strong>文件错误标志</strong>和<strong>文件结束标志</strong>置为0</p>
<p>假设在调用一个输入输出函数时出现错误，<code>ferror()</code>函数值为一个非零数，直到对同一文件调用<code>clearerr()</code>函数、<code>rewind()</code>函数，或任何其他一个输入输出函数</p>

				</article>
				<div class="comments-wrap">
					<div class="share-comments">
						

						

						
					</div>
				</div><!-- end comments wrap -->
			</div>
		</div><!-- end columns -->
	</div><!-- end container -->
</section>  














<script src="asset/prism.js"></script>









</body>

</html>